package com.itheima.system.mapper;

import com.itheima.system.pojo.Permission;
import com.itheima.system.pojo.PermissionApi;
import com.itheima.system.pojo.PermissionMenu;
import com.itheima.system.pojo.PermissionPoint;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author IntelliJ IDEA
 * @date 2020/10/26  15:44
 */
public interface PermissionMapper {

    /**
     * 保存菜单权限
     * @param permissionMenu        菜单权限  POJO类型
     */
    void addPermissionMenu(PermissionMenu permissionMenu);

    /**
     * 保存按钮权限
     * @param permissionPoint       按钮权限  POJO类型
     */
    void addPermissionPoint(PermissionPoint permissionPoint);

    /**
     * 保存api权限
     * @param permissionApi          api权限  POJO类型
     */
    void addPermissionApi(PermissionApi permissionApi);

    /**
     * 保存权限
     * @param permission             权限  POJO类型
     */
    void addPermission(Permission permission);

    /**
     * 修改菜单权限
     * @param permissionMenu        菜单权限  POJO类型
     */
    void updatePermissionMenu(PermissionMenu permissionMenu);

    /**
     * 修改按钮权限                  按钮权限  POJO类型
     * @param permissionPoint
     */
    void updatePermissionPoint(PermissionPoint permissionPoint);


    /**
     * 修改api权限
     * @param permissionApi         修改api权限  POJO类型
     */
    void updatePermissionApi(PermissionApi permissionApi);

    /**
     * 修改权限
     * @param permission            修改权限   POJO类型
     */
    void updatePermission(Permission permission);

    /**
     * 根据权限id查询权限
     * @param id                    权限id
     * @return                      权限
     */
    Permission findPermissionById(@Param("id") String id);

    /**
     * 删除菜单权限
     * @param id                    菜单权限id
     */
    void deletePermissionMenu(@Param("id") String id);

    /**
     * 删除按钮权限
     * @param id                    按钮权限id
     */
    void deletePermissionPoint(@Param("id") String id);

    /**
     * 删除api权限
     * @param id                    api权限id
     */
    void deletePermissionApi(@Param("id") String id);

    /**
     * 删除权限
     * @param id                    权限id
     */
    void deletePermission(@Param("id") String id);

    /**
     * 查询所有权限
     * @param type                  菜单类型,如果type:0 查询菜单+按钮，如果为1，查询全部，type为其他，抛异常
     * @param enVisible             可见性，0 查询所有saas平台的最高权限   1 查询企业的权限
     * @param pid                   权限父id
     * @return                      权限列表结合
     */
    List<Permission> findAllPermission(@Param("type") Integer type, @Param("enVisible") String enVisible, @Param("pid") String pid);

    /**
     * 查询菜单按钮权限
     * @param id                    菜单权限id
     * @return                      菜单权限信息  Map
     */
    Map<String,Object> finPermissionMenuByType(@Param("id") String id);

    /**
     * 查询按钮权限
     * @param id                    按钮权限id
     * @return                      按钮权限信息  Map
     */
    Map<String,Object> findPermissionPointByType(@Param("id") String id);

    /**
     * 查询api权限
     * @param id                    api权限id
     * @return                      api权限信息  Map
     */
    Map<String,Object> findPermissionApiByType(@Param("id") String id);


    /**
     * 查询对应角色下所有的权限id的集合
     * @param roleId            角色Id的集合
     * @return                  权限id的集合
     */
    Set<String> findPermIdsByRoleId(@Param("roleId") String roleId);

    /**
     * 根据用户id和envisble查询权限
     * @param userId             用户id
     * @param envisble           可见性
     * @return                  权限列表集合
     */
    List<Permission> findPermisssionListByUserIdAndEnvisble(@Param("userId") String userId, @Param("envisble") String envisble);

}
